home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 009 / pecolor.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-04-24  |  9.3 KB  |  352 lines

  1. 10  COLOR 7,0
  2. 20  SCREEN 0,0,0
  3. 30  WIDTH 80
  4. 40  CLS
  5. 50  CLOSE
  6. 60  KEY OFF
  7. 70  DEFINT A-Z
  8. 80  REC=5165<UNK! {0009}>   ' FIRST 7 BYTES ARE THE COLOR CONTROL BYTES
  9. 90  '
  10. 100  ' WRITTEN BY : JAMES P MORGAN
  11. 110  '              1749 AMERICANA BLVD 23-G
  12. 120  '               ORLANDO FLA.   32809
  13. 130  '              PH: WORK= 305-826-7279
  14. 140  '                  HOME= 305-859-5658
  15. 150  '
  16. 160  '  THE ORIGINAL THOUGHT AS TO WHAT BYTES OF THE PERSONAL EDITOR
  17. 170  ' NEEDED TO BE CHANGED TO MODIFY THE  CHARACTER COLORS
  18. 180  ' GOES TO JAMES JOHNSEN SO I WONT TAKE CREDIT FOR HIS WORK.
  19. 190  '    HOWEVER MOST OF YOU ARE NOT THAT VERSED ON "DEBUG" OR THE
  20. 200  ' FORMAT OF THE COLOR BYTE ATTRIBUTES.
  21. 210  '  THIS BASIC PROGRAM WILL INSURE THAT YOU USE THE CORRECT BIT SETTINGS
  22. 220  ' AS WELL AS PROVIDE EASE OF USE. IF YOU HAVE ANY PROBLEMS, EITHER
  23. 230  ' WRITE OR LEAVE A MESSAGE ON RICH'S OR WES MERCHANTS BBS.
  24. 240  '
  25. 250  '  LOCATION      VALUE      FUNCTION
  26. 260  '  --------      -----      --------
  27. 270  '     1         X'07'      COLOR OF TEXT YOU SEE ON THE SCREEN.
  28. 280  '                          THIS CAN BE EITHER TEXT THAT YOU LOAD INTO
  29. 290  '            WHITE/BLACK   THE EDITOR OR SOMETHING YOU TYPE IN.
  30. 300  '
  31. 310  '     2         X'70'      COLOR THE TEXT BECOMES IF YOU MARK IT FOR
  32. 320  '            BLACK/WHITE   EITHER MOVING OR COPYING OR WHAT-HAVE-YOU.
  33. 330  '
  34. 340  '     3         X'17'      COLOR USED WHEN YOU PRESS THE ESCAPE KEY TO
  35. 350  '                          LEAVE ENTERING TEXT IN THE EDITOR TO THE
  36. 360  '            WHITE/BLUE    COMMAND LINE. THE CHARACTER WHERE THE CURSOR
  37. 370  '                          WAS IS LEFT "MARKED" ON THE EDIT SCREEN.
  38. 380  '                          THIS IS THE COLOR VALUE FOR THAT "MARKER".
  39. 390  '                          SPECIFICALLY, THIS IS THE COLOR VALUE USED
  40. 400  '                          WHEN LEAVING THE EDIT SCREEN IF THE CURSOR
  41. 410  '                          IS ON AN UNMARKED (FOR BLOCK COPY..MOVE).
  42. 420  '
  43. 430  '     4          X'71'     COLOR USED WHEN YOU PRESS THE ESCAPE KEY TO
  44. 440  '                          LEAVE ENTERING TEXT IN THE EDITOR COMMAND LINE.
  45. 450  '            BLUE/WHITE    THE CHARACTER WHERE THE CURSOR WAS IS LEFT
  46. 460  '                          "MARKED" ON THE EDIT SCREEN. UNLIKE ABOVE
  47. 470  '                          (LOCATION 3) THIS COLOR VALUE IS USED IF THE
  48. 480  '                          CURSOR WAS RESTING ON A MARKED AREA OF TEXT
  49. 490  '                          (FOR BLOCK COPY OR MOVE OR ECT..).
  50. 500  '
  51. 510  '     5          X'71'     COLOR OF TEXT ON THE COMMAND LINE AS YOU TYPE
  52. 520  '                          IT ON THE COMMAND LINE. THE '7' IN THE '71' IS
  53. 530  '            BLUE/WHITE    THE COLOR USED FOR THE COMMAND LINE. ON EVERY
  54. 540  '                          MONITOR I'VE SEEN, THIS IS LOW INTENSITY WHITE
  55. 550  '
  56. 560  '     6          X'07'     COLOR OF TEXT BENEATH THE COMMAND LINE. THIS
  57. 570  '                          COLOR IS USED FOR THE TEXT  'REPLACE' AND
  58. 580  '            WHITE/BLACK   'INSERT' AND THE NUMBER THAT TELL YOU WHAT ROW
  59. 590  '                          AND COLUMN YOU ARE CURRENTLY TYPING.
  60. 600  '
  61. 610  '     7          X'04'     COLOR USED FOR THE ERROR MESSAGES.
  62. 620  '            RED/BLACK
  63. 630  '
  64. 640  '               COLOR ATTRIBUTE FORMAT
  65. 650  '               ----------------------
  66. 660  '
  67. 670  '      7   6   5   4   3   2   1   0      ------- BIT NUMBERS
  68. 680  '     -------------------------------
  69. 690  '      B | R | G | B | I | R | G | B      ------- BIT ATTRIBUTE
  70. 700  '     -------------------------------
  71. 710  '        |           |
  72. 720  '     FG | BACKGROUND| FORE GROUND
  73. 730  '
  74. 740  '     FG = 1  THEN FOREGROUND BLINK
  75. 750  '      I = 1  THEN HIGH INTENSITY FOREGOROUND
  76. 760  '
  77. 770  '     R   G   B
  78. 780  '     0   0   0  = BLACK
  79. 790  '     0   0   1  = BLUE
  80. 800  '     0   1   0  = GREEN
  81. 810  '     0   1   1  = CYAN
  82. 820  '     1   0   0  = RED
  83. 830  '     1   0   1  = MAGENTA
  84. 840  '     1   1   0  = YELLOW
  85. 850  '     1   1   1  = WHITE
  86. 860  '
  87. 870  '
  88. 880  BLACK=0
  89. 890  BLUE=1
  90. 900  GREEN=2
  91. 910  CYAN=3
  92. 920  RED=4
  93. 930  MAGENTA=5
  94. 940  YELLOW=6
  95. 950  WHITE=7
  96. 960  HIGH.INTENSITY=8
  97. 970  BLINKING=128
  98. 980  FORE.GROUND=1
  99. 990  BACK.GROUND=16
  100. 1000  GOSUB 2350
  101. 1010  GOSUB 3140
  102. 1020  '
  103. 1030  OPEN "PE.EXE" AS #1 LEN=8
  104. 1040  '
  105. 1050  GET 1,REC
  106. 1060  FIELD 1,8 AS A$
  107. 1070  BYTE$=A$
  108. 1080  GOSUB 2080
  109. 1090  GOSUB 2660
  110. 1100  GOSUB 3050
  111. 1110  ROW=0
  112. 1120  COL=0
  113. 1130  LOCATE ROWS(ROW),COLS(COL),1
  114. 1140  GOSUB 1520    'CLEAR KEYBOARD BUFFERS
  115. 1150  KEYIN$=INKEY$
  116. 1160  IF KEYIN$="" GOTO 1150
  117. 1170  IF LEN(KEYIN$)=1 GOTO 1250
  118. 1180  KEYIN$=RIGHT$(KEYIN$,1)
  119. 1190  IF KEYIN$=CHR$(75) THEN GOSUB 1930: GOTO 1150    'CURSOR LEFT
  120. 1200  IF KEYIN$=CHR$(77) THEN GOSUB 1880: GOTO 1150    'CURSOR RIGHT
  121. 1210  IF KEYIN$=CHR$(72) THEN GOSUB 1980: GOTO 1150    'CURSOR UP
  122. 1220  IF KEYIN$=CHR$(80) THEN GOSUB 2020: GOTO 1150    'CURSOR DOWN
  123. 1230  BEEP
  124. 1240  GOTO 1140
  125. 1250  IF KEYIN$=CR$ GOTO 1310
  126. 1260  IF KEYIN$="+" THEN DIRECTION=1:GOSUB 1570:GOTO 1140
  127. 1270  IF KEYIN$="-" THEN DIRECTION=-1:GOSUB 1570:GOTO 1140
  128. 1280  IF KEYIN$=ESC$ GOTO 1490
  129. 1290  BEEP
  130. 1300  GOTO 1140
  131. 1310  GOSUB 2950
  132. 1320  LOCATE 25,1,0
  133. 1330  PRINT STRING$(79," ");
  134. 1340  LOCATE 25,1,1
  135. 1350  COLOR 15,0
  136. 1360  PRINT "ARE YOU SURE YOU WANT TO USE THESE COLOR ATTRIBUTES (Y/N) ? ";
  137. 1370  COLOR 7,0:GOSUB 1520
  138. 1380  KEYIN$=INKEY$
  139. 1390  IF KEYIN$="" GOTO 1380
  140. 1400  IF LEN(KEYIN$)<>1 THEN BEEP:GOTO 1370
  141. 1410  IF KEYIN$=ESC$ GOTO 1490
  142. 1420  IF KEYIN$="N" OR KEYIN$="n" GOTO 1010
  143. 1430  IF KEYIN$="Y" OR KEYIN$="y" GOTO 1460
  144. 1440  BEEP
  145. 1450  GOTO 1370
  146. 1460  LSET A$=BYTE$
  147. 1470  ON ERROR GOTO 3390
  148. 1480  PUT 1,REC
  149. 1490  CLOSE
  150. 1500  CLS
  151. 1510  END
  152. 1520  DEF SEG=0
  153. 1530  POKE 1050,PEEK(1052)
  154. 1540  DEF SEG
  155. 1550  POKE 106,0
  156. 1560  RETURN
  157. 1570  IF COL=0 THEN GOSUB 1810:RETURN
  158. 1580  IF COL=1 THEN GOSUB 1640:RETURN
  159. 1590  IF COL=2 THEN GOSUB 1690:RETURN
  160. 1600  IF COL=3 THEN GOSUB 1740:RETURN
  161. 1610  PRINT"PROGRAM TRAP REACHED"
  162. 1620  STOP
  163. 1630  END
  164. 1640  INTENSITY(ROW)=INTENSITY(ROW) XOR 1
  165. 1650  LOCATE ROWS(ROW),COLS(COL),0
  166. 1660  PRINT HILOW$(INTENSITY(ROW));
  167. 1670  LOCATE ROWS(ROW),COLS(COL),1
  168. 1680  RETURN
  169. 1690  BLINK(ROW)=BLINK(ROW) XOR 1
  170. 1700  LOCATE ROWS(ROW),COLS(COL),0
  171. 1710  PRINT YESNO$(BLINK(ROW));
  172. 1720  LOCATE ROWS(ROW),COLS(COL),1
  173. 1730  RETURN
  174. 1740  B.GROUND(ROW)=(B.GROUND(ROW) + DIRECTION)
  175. 1750  IF B.GROUND(ROW)<0 THEN B.GROUND(ROW)=7
  176. 1760  IF ABS(B.GROUND(ROW))>7 THEN B.GROUND(ROW)=0
  177. 1770  LOCATE ROWS(ROW),COLS(COL),0
  178. 1780  PRINT COLORS$(ABS(B.GROUND(ROW)));
  179. 1790  LOCATE ROWS(ROW),COLS(COL),1
  180. 1800  RETURN
  181. 1810  F.GROUND(ROW)=(F.GROUND(ROW) + DIRECTION)
  182. 1820  IF F.GROUND(ROW)<0 THEN F.GROUND(ROW)=7
  183. 1830  LOCATE ROWS(ROW),COLS(COL),0
  184. 1840  IF ABS(F.GROUND(ROW))>7 THEN F.GROUND(ROW)=0
  185. 1850  PRINT COLORS$(ABS(F.GROUND(ROW)));
  186. 1860  LOCATE ROWS(ROW),COLS(COL),1
  187. 1870  RETURN
  188. 1880  COL=COL+1
  189. 1890  IF COL>3 THEN ROW=ROW+1:COL=0
  190. 1900  IF ROW>6 THEN ROW=0
  191. 1910  GOSUB 2060
  192. 1920  RETURN
  193. 1930  COL=COL-1
  194. 1940  IF COL<0 THEN COL=3:ROW=ROW-1
  195. 1950  IF ROW<0 THEN ROW=6
  196. 1960  GOSUB 2060
  197. 1970  RETURN
  198. 1980  ROW=ROW-1
  199. 1990  IF ROW<0 THEN ROW=6
  200. 2000  GOSUB 2060
  201. 2010  RETURN
  202. 2020  ROW=ROW+1
  203. 2030  IF ROW>6 THEN ROW=0
  204. 2040  GOSUB 2060
  205. 2050  RETURN
  206. 2060  LOCATE ROWS(ROW),COLS(COL),1
  207. 2070  RETURN
  208. 2080  CLS
  209. 2090  PRINT TAB(32);"PERSONAL EDITOR"
  210. 2100  PRINT
  211. 2110  PRINT TAB(29);"COLOR SELECTION MENU"
  212. 2120  PRINT
  213. 2130  PRINT TAB(4);"FORE    INTENSITY  BLINK    BACK"
  214. 2140  PRINT TAB(3);"GROUND    (FOREG)  (FOREG)  GROUND";TAB(43);"FUNCTION OF AREA FOR COLOR DEFINITION"
  215. 2150  PRINT
  216. 2160  PRINT TAB(42);"COLOR OF TEXT YOU SEE ON THE SCREEN"
  217. 2170  PRINT
  218. 2180  PRINT TAB(42);"COLOR OF TEXT WHEN IT IS MARKED"
  219. 2190  PRINT
  220. 2200  PRINT TAB(42);"COLOR WHEN YOU LEAVE THE TEXT LINE"
  221. 2210  PRINT
  222. 2220  PRINT TAB(42);"COLOR WHEN YOU LEAVE THE COMMAND LINE"
  223. 2230  PRINT
  224. 2240  PRINT TAB(42);"COLOR OF TEXT ON THE COMMAND LINE"
  225. 2250  PRINT
  226. 2260  PRINT TAB(42);"COLOR OF TEXT BENEATH THE COMMAND LINE"
  227. 2270  PRINT
  228. 2280   PRINT TAB(42);"COLOR USED FOR ERROR MESSAGES"
  229. 2290  LOCATE 22,1
  230. 2300  PRINT "USE CURSOR KEYS TO MOVE AROUND THE SCREEN ; 'ESC' TO EXIT PROGRAM"
  231. 2310  PRINT "USE '+' OR '-' TO CHANGE ANY COLOR ATTRIBUTES"
  232. 2320  LOCATE 25,1
  233. 2330  PRINT"PRESS 'ENTER' ONLY WHEN YOU WANT TO MAKE THE CHANGES PERMANANT";
  234. 2340  RETURN
  235. 2350  DIM COLS(4),ROWS(7),COLORS$(8)
  236. 2360  DIM B.GROUND(7)
  237. 2370  DIM F.GROUND(7)
  238. 2380  DIM HILOW$(2)
  239. 2390  DIM YESNO$(2)
  240. 2400  HILOW$(0)="NORMAL"
  241. 2410  HILOW$(1)="HIGH  "
  242. 2420  YESNO$(0)="NO "
  243. 2430  YESNO$(1)="YES"
  244. 2440  CR$=CHR$(13)
  245. 2450  ESC$=CHR$(27)
  246. 2460  FOR I=0 TO 3
  247. 2470  READ COLS(I)
  248. 2480  NEXT
  249. 2490  FOR I=0 TO 6
  250. 2500  READ ROWS(I)
  251. 2510  NEXT
  252. 2520  FOR I=0 TO 7
  253. 2530  READ COLORS$(I)
  254. 2540  NEXT
  255. 2550  RETURN
  256. 2560  DATA 2,13,24,31
  257. 2570  DATA  8,10,12,14,16,18,20
  258. 2580  DATA "BLACK  "
  259. 2590  DATA "BLUE   "
  260. 2600  DATA "GREEN  "
  261. 2610  DATA "CYAN   "
  262. 2620  DATA "RED    "
  263. 2630  DATA "MAGENTA"
  264. 2640  DATA "YELLOW "
  265. 2650  DATA "WHITE  "
  266. 2660  FOR I=1 TO 7
  267. 2670  COLOR.ATTR=ASC(MID$(BYTE$,I,1))
  268. 2680  GOSUB 2730
  269. 2690  GOSUB 2780
  270. 2700  NEXT
  271. 2710  GOSUB 2840
  272. 2720  RETURN
  273. 2730  INTENSITY=(COLOR.ATTR AND HIGH.INTENSITY) / 8
  274. 2740  BLINK=(COLOR.ATTR AND BLINKING) / 128
  275. 2750  F.GROUND=COLOR.ATTR AND 7
  276. 2760  B.GROUND=(COLOR.ATTR AND 112) / 16
  277. 2770  RETURN
  278. 2780  I1=I-1
  279. 2790  B.GROUND(I1)=B.GROUND
  280. 2800  F.GROUND(I1)=F.GROUND
  281. 2810  INTENSITY(I1)=INTENSITY
  282. 2820  BLINK(I1)=BLINK
  283. 2830  RETURN
  284. 2840  FOR ROW=0 TO 6
  285. 2850  FOR COL=0 TO 3
  286. 2860  GOSUB 2900
  287. 2870  NEXT
  288. 2880  NEXT
  289. 2890  RETURN
  290. 2900  IF COL=0 THEN GOSUB 1830
  291. 2910  IF COL=1 THEN GOSUB 1650
  292. 2920  IF COL=2 THEN GOSUB 1700
  293. 2930  IF COL=3 THEN GOSUB 1760
  294. 2940  RETURN
  295. 2950  FOR I=1 TO 7
  296. 2960  COLOR.ATTR=0
  297. 2970  ROW=I-1
  298. 2980  COLOR.ATTR=B.GROUND(ROW) * BACK.GROUND
  299. 2990  COLOR.ATTR=COLOR.ATTR + (F.GROUND(ROW) * FORE.GROUND)
  300. 3000  COLOR.ATTR=COLOR.ATTR + (INTENSITY(ROW) * HIGH.INTENSITY)
  301. 3010  COLOR.ATTR=COLOR.ATTR + (BLINK(ROW) * BLINKING)
  302. 3020  MID$(BYTE$,I,1)=CHR$(COLOR.ATTR)
  303. 3030  NEXT
  304. 3040  RETURN
  305. 3050  RETURN
  306. 3060  X=CSRLIN
  307. 3070  Y=POS(0)
  308. 3080  LOCATE 25,1,0
  309. 3090  FOR J=1 TO 8
  310. 3100  PRINT ASC(MID$(BYTE$,J,1));" ";
  311. 3110  NEXT
  312. 3120  LOCATE X,Y,1
  313. 3130  RETURN
  314. 3140  CLS
  315. 3150  CLOSE
  316. 3160  ON ERROR GOTO 3270
  317. 3170  PRINT
  318. 3180  PRINT "PUT DISKETTE WITH PERSONAL EDITOR IN DRIVE 'A:'"
  319. 3190  PRINT "PRESS ANY KEY TO CONTINUE, OR 'ESC' TO EXIT PROGRAM"
  320. 3200  GOSUB 1520
  321. 3210  KEYIN$=INKEY$
  322. 3220  IF KEYIN$="" GOTO 3210
  323. 3230  IF KEYIN$=ESC$ GOTO 1490
  324. 3240  FILES "PE.EXE"
  325. 3250  ON ERROR GOTO 0
  326. 3260  RETURN
  327. 3270  ENO=ERR
  328. 3280  RESUME 3290
  329. 3290  ON ERROR GOTO 0
  330. 3300  PRINT
  331. 3310  IF ENO<>53 THEN PRINT "BASIC ERROR ";ENO:GOTO 3330
  332. 3320  PRINT "PE.EXE NOT FOUND ON DISKETTE IN DRIVE 'A:'"
  333. 3330  PRINT "CORRECT PROBLEM AND PRESS ANY KEY TO CONTINUE"
  334. 3340  GOSUB 1520
  335. 3350  KEYIN$=INKEY$
  336. 3360  IF KEYIN$="" GOTO 3350
  337. 3370  IF KEYIN$=ESC$ GOTO 1490
  338. 3380  GOTO 3160
  339. 3390  CLS
  340. 3400  PRINT
  341. 3410  ENO=ERR
  342. 3420  RESUME 3430
  343. 3430  ON ERROR GOTO 0
  344. 3440  IF ENO<>70 THEN PRINT "BASIC ERROR ";ENO:GOTO 3460
  345. 3450  PRINT "DISKETTE IS WRITE PROTECTED"
  346. 3460  PRINT "CORRECT THE PROBLEM AND PRESS ANY KEY TO CONTINUE"
  347. 3470  GOSUB 1520
  348. 3480  KEYIN$=INKEY$
  349. 3490  IF KEYIN$="" GOTO 3480
  350. 3500  IF KEYIN$=ESC$ GOTO 1490
  351. 3510  GOTO 1470
  352.